#include <main.h>
#include <float.h>

int	main(int argc, char *argv[])
{
	int 			nb_fourmis = 15 ;
	int 			nb_villes ;/*nombre de villes dans le graphe G*/
	int				i ;
	int				k ;
	int				l ;
	int				*meilleur_chemin ;
	double			Q = 1.0 ;
	const double 	epsilon = 0.00001 ;
	double 			alpha = 1 ;
	double 			beta = 2 ;
	double			cout_meilleur_chemin ;
	double			cout_chemin ;
	double 			rho = 0.5 ;
	double			*longueur_solution ;
	double			x_min ;
	double			y_min ;
	double			x_max ;
	double			y_max ;
	char 			*path ;
	File			browse ;
	t_ARC			*temp ;
	x_min = 0 ;
	y_min = 0 ;
	x_max = 0 ;
	y_max = 0 ;
	longueur_solution = NULL ;
	longueur_solution = calloc(nb_fourmis, sizeof(*longueur_solution)) ;
	browse = creer_file() ;
	browse = calloc(1, sizeof(*browse)) ;
	cout_meilleur_chemin = DBL_MAX ;
	i = 0 ;
	temp = NULL ;
	
	printf("\nVeuillez entrer le nombre de fourmis :\n") ;
	/*scanf("%d", &nb_fourmis) ;*/
	printf("\n\n-----------------------------------------------------------\n\n") ;
	path = file_path(argc, argv) ;
	if (path == NULL)
	{
		return (0) ;
	}
	FILE *f ;
	f = fopen(path, "rt") ;
	if(f == NULL)
	{
		printf("\nUne erreur s'est produite lors de l'ouverture du fichier\n") ;
		return (0) ;
	}
	t_SOMMET* graphe ;
	graphe = NULL ;
	graphe = creation_graphe(f, graphe, &nb_villes, epsilon, &x_min, &y_min, &x_max, &y_max) ;
	fclose(f) ;
	
	meilleur_chemin = calloc(nb_villes, sizeof(*meilleur_chemin)) ;
	
	t_FOURMI* tab_fourmis ;
	tab_fourmis = NULL ;
	tab_fourmis = init_fourmis(tab_fourmis, nb_fourmis, nb_villes) ;
	k = 0 ;
	srand(time(NULL)) ;
	
	
	while(k < nb_fourmis)
	{
		i = 0 ;
		cout_chemin = 0 ;
		while(i < nb_villes - 1)
		{
			choix_ville(graphe[tab_fourmis[k].ville_courante], tab_fourmis + k, nb_villes, alpha, beta, &cout_chemin) ;
			i++ ;
		}
		longueur_solution[k] = cout_chemin ;
		
		if(cout_chemin < cout_meilleur_chemin)
		{
			cout_meilleur_chemin = cout_chemin ;
			l = 0 ;
			printf("\n\n-----------------------------------------------------------\n\n") ;
			printf("\nSolution : ")  ;
			visualiser_file(tab_fourmis[k].solution) ;
			
			browse = tab_fourmis[k].solution ;
			while (browse->next != tab_fourmis[k].solution)
			{
				temp = defiler(&browse) ;
				meilleur_chemin[l] = temp->depart ;
				 
				l++ ;
			}
			temp = defiler(&browse) ;
			meilleur_chemin[nb_villes - 2] = temp->depart ;
			meilleur_chemin[nb_villes - 1] = temp->arrivee ;
			
		}
		k++ ;
	}
	/*Test*/
	l = 1 ;
	printf("\nMeilleur chemin : ")  ;
	printf("%d", meilleur_chemin[0]) ;
	while(l < nb_villes)
	{
		printf(", %d", meilleur_chemin[l])  ;
		l++ ;
	}
	printf("\n\n")  ;
	/*Test*/
	evaporation(graphe, tab_fourmis, longueur_solution, nb_fourmis, nb_villes, Q, rho ) ;
	
	/*Test*/
	l = 0 ;
	printf("\nListes de tous les arcs après évaporation : \n")  ;
	while(l < nb_villes)
	{
		visualiser_liste(graphe[l].voisins) ;
		l++ ;
	}
	/*Test*/
	return(0) ;
}
